#ifndef __ALGORITHM_H
#define __ALGORITHM_H

#include "node.h"
#include "unsortedVector.h"
#include "sortedVectorByF.h"
#include "sortedVectorByXY.h"
#include "skipList.h"
#include "hashTable.h"
#include "hashTableSortedVector.h"
#include "skipListItem.h"
#include "results.h"
#include <vector>
#include <cstring>
#include <typeinfo>
#include <iostream>

class algorithm
{
	protected:
		int* pmap;
		int width;
		int height;
		int visitedNodes;
		Node* start;
		Node* goal;
		std::pair<int, double> add;
		std::pair<int, double> modify;
		std::pair<int, double> selectLowest;
		std::pair<int, double> find;

		Node* allocateNode(int x, int y);
		std::vector<coord>* getSuccessors(Node* node);
		results* createResults(Node* n, const std::type_info& type, std::string a, double diffticks);

	public:
		virtual results* execute(){};
		void setWidth(int w);
		void setHeight(int h);
};

#endif